Software running on a processor, microprocessor, and/or processing unit to provide certain functionality often changes over time and also increases in complexity. The changes can result from the need to correct bugs, or errors, in the software files, adapt to evolving technologies, or add new features, to name a few. In particular, software hosted on mobile processing devices, for example mobile wireless devices, often includes numerous software bugs that require correction. Software includes one or more computer programs, algorithms, files, and/or code pertaining to operation of the host device. Software can be divided into smaller units that are referred to as modules or components.
Portable processor-based devices like mobile processing devices typically include a real-time operating system (RTOS) in which all software components of the device are linked as a single large executable image. Further, file system support has become common recently due to the availability of compact storage and more demanding functionalities in these mobile wireless devices. In addition, the single large image needs to be preloaded, or embedded, into the device using a slow communication link like a radio, infrared, or serial link.
Obstacles to updating the software of mobile processing devices include the time, bandwidth, and cost associated with delivering the updated file to the device, as well as limited resources of the device available for use in updating new files once received. As one example, small changes in one or more sections of a software component result in large changes in a host software image because the small changes cause a shift in position of all unchanged data sections that follow the changed sections. Consequently, there is a need for reducing differences in content between different versions of software resulting from shifts of unchanged data sections caused by content changes of changed data sections.